//package com.wcbtest.webs;
//
//import com.jcraft.jsch.Channel;
//import com.jcraft.jsch.JSch;
//import com.jcraft.jsch.JSchException;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import javax.websocket.*;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.util.HashMap;
//
//@ServerEndpoint("/terminal")
//@Component
//public class TerminalEndpoint2 {
//    //private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<>());
//    private static final HashMap<String, HashMap<String, Object>> clientData = new HashMap<>();
//
//    /***
//     * 连接建立时执行的操作
//     * @param session
//     */
//    @OnOpen
//    public void onOpen(Session session) {
//        System.out.println("获取访客:" + session.getId());
//        HashMap<String, Object> map = new HashMap<>();
//        map.put("clientSession", session);
//        clientData.put(session.getId(), map);
//    }
//
//
//    /***
//     * 收到客户端消息执行的操作
//     */
//    @OnMessage
//    public void onMessage(String command, Session session) {
//        System.out.println("获取访客:" + session.getId());
//        System.out.println("收到客户端消息:" + command);
//        // 处理客户端信息
//        try {
//            sendSSH(command, session);
//        } catch (Exception e) {
//            sendClient(session, e.getMessage());
//        }
//    }
//
//
//    public void sendSSH(String command, Session session) {
//        try {
//            Channel jschChannel = null;
//            if (clientData.containsKey(session.getId())) {
//                HashMap<String, Object> map = clientData.get(session.getId());
//                if (map.containsKey("jschChannel")) {
//                    jschChannel = (Channel) map.get("jschChannel");
//                    System.out.println("获取用户session");
//                } else {
//                    jschChannel = initJschSession();
//                    map.put("jschChannel", jschChannel);
//                }
//            } else {
//                throw new RuntimeException("当前用户不存在");
//            }
//            // 获取输入输出流
//            OutputStream out = jschChannel.getOutputStream();  // 发送命令
//            InputStream in = jschChannel.getInputStream();     // 接收输出
//            // 执行命令
//            //out.write(command.getBytes());
//            out.write((command + "\n").getBytes());
//            //out.write("cd /home\n".getBytes());
//            out.flush();
//            //// 读取命令的输出结果
//             outClient(session, jschChannel, in);
//            //channel.disconnect();
//            //jschChannel.disconnect();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    private void outClient(Session session, Channel channel, InputStream in) throws IOException {
//        byte[] tmp = new byte[1024];
//        while (true) {
//            while (in.available() > 0) {
//                int i = in.read(tmp, 0, 1024);
//                if (i < 0) {
//                    break;
//                }
//                String msg = new String(tmp, 0, i);
//                System.out.println(msg);
//                sendClient(session, msg);
//            }
//            if (channel.isClosed()) {
//                String msg = "Exit-status: " + channel.getExitStatus();
//                System.out.println(msg);
//                sendClient(session, msg);
//                break;
//            }
//            try {
//                Thread.sleep(500);
//            } catch (Exception ee) {
//            }
//        }
//    }
//
//    private Channel initJschSession() throws JSchException {
//        System.out.println("开始初始化服务器 ");
//        String host = "192.168.110.130";
//        String user = "root";
//        String password = "123456";
//        int port = 22; // SSH默认端口是22
//
//        JSch jsch = new JSch();
//        com.jcraft.jsch.Session jschSession = jsch.getSession(user, host, port);
//        jschSession.setPassword(password);
//        jschSession.setConfig("StrictHostKeyChecking", "no"); // 可选，避免首次连接时需要手动确认密钥
//        jschSession.connect();
//        System.out.println("初始化服务器 => " + host);
//        // 创建交互式shell通道
//        Channel channel = jschSession.openChannel("shell");
//        //channel.setPty(true);
//        channel.connect();
//        return channel;
//    }
//
//
//    /***
//     * 向客户端发送信息
//     */
//    //@Scheduled(fixedRate = 2000)
//    @Scheduled(cron = "0/5 * * * * ?")
//    public void sendMsg() throws IOException {
//        System.out.println("向客户端发送信息");
//    }
//
//
//    @OnError
//    public void onError(Session session, Throwable error) {
//        sendClient(session, "服务器出现异常：" + error.getMessage());
//        System.out.println("获取访客:" + session.getId());
//        error.printStackTrace();
//    }
//
//    /***
//     * 连接关闭时执行的操作
//     * @param session
//     */
//    @OnClose
//    public void onClose(Session session) {
//        System.out.println("获取访客:" + session.getId());
//        System.out.println("终端连接关闭:" + session.getId());
//        clientData.remove(session.getId());
//    }
//
//
//    private void sendClient(Session session, String str) {
//        try {
//            session.getBasicRemote().sendText(str);
//        } catch (Exception e) {
//            throw new RuntimeException("发送信息到客户端失败");
//        }
//    }
//
//
//}
